#include <iostream>
#ifdef DEBUG_AT_C
#include <ctime>
#endif // DEBUG_AT_C
 
unsigned long long tree_num[100]= {1,1,2};

unsigned long long get_tree_num(unsigned long long n) {
    if (tree_num[n]) return tree_num[n];
    unsigned long long sum=0;
    unsigned long long l,r;
    for (size_t offset = 0; offset < n; offset++)
    {
        l = get_tree_num(offset);
        r = get_tree_num(n-1-offset);
        sum +=l *r ;
    }

    tree_num[n]=sum;
    return sum;
}


int main() {
    unsigned long long n ;
    unsigned long long sum =0;
    while (std::cin>>n)
    {
#ifdef DEBUG_AT_C
        
        clock_t start = clock();
#endif // DEBUG_AT_C
        std::cout << get_tree_num(n) << '\n';
#ifdef DEBUG_AT_C
        clock_t end = clock();
/*         std::cout << "correct:" << numTrees(n)<<'\n'; */
        std::cout << "Time used:"<<(double)(end-start)*1000/CLOCKS_PER_SEC << "(ms)\n";
#endif // DEBUG_AT_C
    }
    return 0;
}